package com.xgkj.diyiketang;

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.multidex.MultiDex;

import com.easemob.chat.EMChat;
import com.easemob.chat.EMChatManager;
import com.xgkj.diyiketang.data.EatShowUserInfo;
import com.xgkj.diyiketang.http.engine.TaskManager;
import com.xgkj.diyiketang.hxsdk.DemoDBManager;
import com.xgkj.diyiketang.hxsdk.DemoHelper;
import com.xgkj.diyiketang.util.ACache;
import com.xgkj.diyiketang.util.AppMetaData;
import com.xgkj.diyiketang.util.CrashHandler;
import com.xgkj.diyiketang.util.PalLog;

import java.util.Stack;

import cn.jpush.android.api.JPushInterface;

public class EatShowApp extends Application {
    private static EatShowApp instance;
    private static ACache mACache;
    public static String userId;
    public static String tag;
    private TaskManager mTaskManager = null;
    private PalLog mPalLog;
    private Stack<Context> mContextStack;
    private EatShowUserInfo mUserInfo = null;
    // 所有系统配置有关的信息 都存放在这个xml文件里面（sharedPreferencesFile）
    private static final String SystemConfigFile = "systemConfig.xml";
    // 存放系统配置信息的sharedPreferences文件实例
    private static SharedPreferences mSharedPreferences;
    public EatShowUserInfo getmUserInfo() {
        return mUserInfo;
    }

    public void createSharedPreferencesFile() {
        mSharedPreferences = getSharedPreferences(SystemConfigFile, MODE_PRIVATE);
    }
    public static SharedPreferences getSystemConfigSharedFile() {
        return mSharedPreferences;
    }
    public void setmUserInfo(EatShowUserInfo mUserInfo) {
        this.mUserInfo = mUserInfo;
    }

//    public static YoukuPlayerBaseConfiguration configuration;

    @Override
    public void onCreate() {
        super.onCreate();
        createSharedPreferencesFile();
        instance = this;
        mACache = ACache.get(this);
        if (!BuildConfig.DEBUG) {
             new CrashHandler(this);
        }
        init();
//        initSdk(userId);

//      极光推送
        JPushInterface.setDebugMode(true);
        JPushInterface.init(this);
        mPalLog = PalLog.getInstance();
        mPalLog.setContext(this);
        mContextStack = new Stack<Context>();
        AppMetaData.init(this);
        mTaskManager = new TaskManager();
//        initYouku();

        EMChat.getInstance().init(this);
        EMChat.getInstance().setDebugMode(false);
        DemoHelper.getInstance().init(this);

//        // 通过WXAPIFactory工厂，获取IWXAPI的实例
//        IWXAPI wxApi = WXAPIFactory.createWXAPI(this, WX_APP_ID, true);
//        // 将应用的注册到微信
//        wxApi.registerApp(WX_APP_ID);
//        WXManager.instance().setApi(wxApi);
    }

//    //初始化直播sdk
//    private void initSdk(String userId) {
//
//        String appID ;
//        if (TextUtils.isEmpty(Constants.appID)) {
//            return;
//        }else {
//            appID = Constants.appID;
//        }
//
//        String accessKey ;
//        if (TextUtils.isEmpty(Constants.accessKey)) {
//            return;
//        }else {
//            accessKey = Constants.accessKey;
//        }
//
//        String secretKey ;
//        if (TextUtils.isEmpty(Constants.secretKey)) {
//            return;
//        }else {
//            secretKey = Constants.secretKey;
//        }
//
//        String userID ;
//        if (TextUtils.isEmpty(EatShowApp.getACache().getAsString(Constants.USER_ID))) {
//            return;
//        }else {
//            userID = EatShowApp.getACache().getAsString(Constants.USER_ID);
//        }
//
//        EVSdk.setInitListener(new EVSdk.OnSDKInitListener() {
//            @Override public void onSuccess() {
////                Toast.makeText(LoginActivity.this,"成功",Toast.LENGTH_SHORT).show();
//
////                SingleToast.show(getApplicationContext(), R.string.msg_init_sdk_success);
////                initSdkBtn.setText(R.string.msg_sdk_init_success);
////                livePushBtn.setEnabled(true);
////                messageBtn.setEnabled(true);
////                liveShowBtn.setEnabled(true);
//            }
//
//            @Override public void onFailed(int code, String msg) {
////                Toast.makeText(this,"bunengweikong",Toast.LENGTH_SHORT).show();
//
////                SingleToast.show(getApplicationContext(), getString(R.string.msg_init_sdk_fail, msg));
////                initSdkBtn.setText(R.string.msg_sdk_reinit);
////                initSdkBtn.setEnabled(true);
//            }
//        });
//        EVSdk.init(getApplicationContext(), appID, accessKey, secretKey, userID);
////        EVSdk.init(getApplicationContext(), s, ss, sss, ddd);
//    }

    private void initYouku() {
//        configuration = new YoukuPlayerBaseConfiguration(this) {
//
//
//            /**
//             * 通过覆写该方法，返回“正在缓存视频信息的界面”，
//             * 则在状态栏点击下载信息时可以自动跳转到所设定的界面.
//             * 用户需要定义自己的缓存界面
//             */
//            @Override
//            public Class<? extends Activity> getCachingActivityClass() {
//                // TODO Auto-generated method stub
//                return null;
//            }
//
//            /**
//             * 通过覆写该方法，返回“已经缓存视频信息的界面”，
//             * 则在状态栏点击下载信息时可以自动跳转到所设定的界面.
//             * 用户需要定义自己的已缓存界面
//             */
//
//            @Override
//            public Class<? extends Activity> getCachedActivityClass() {
//                // TODO Auto-generated method stub
//                return null;
//            }
//
//            /**
//             * 配置视频的缓存路径，格式举例： /appname/videocache/
//             * 如果返回空，则视频默认缓存路径为： /应用程序包名/videocache/
//             *
//             */
//            @Override
//            public String configDownloadPath() {
//                // TODO Auto-generated method stub
//
//                //return "/myapp/videocache/";			//举例
//                return null;
//            }
//        };

    }

    public static EatShowApp getInstance() {
        return instance;
    }
    public static ACache getACache() {
        return mACache;
    }
    private void init() {
        mPalLog = PalLog.getInstance();
        mPalLog.setContext(this);
    }

    public TaskManager getTaskManager() {
        return mTaskManager;
    }


    public void exitApp() {
        if (mContextStack != null) {
            for (int i = 0; i < mContextStack.size(); i++) {
                Activity mContext = (Activity) mContextStack.get(i);
                mContext.finish();
            }
            mContextStack.clear();
        }
        EMChatManager.getInstance().logout();
        DemoDBManager.getInstance().closeDB();
        System.exit(0);
    }

    public void finishAllActivity(){
        if (mContextStack != null){
            for (int i = 0;i<mContextStack.size();i++){
                Activity mContext = (Activity) mContextStack.get(i);
                mContext.finish();
            }
            mContextStack.clear();
        }
    }

    /**
     * context入栈
     *
     * @param context
     */
    public void AddContextStack(Context context) {
        if (mContextStack == null)
            return;
        if (mContextStack.contains(context)) {
            mContextStack.remove(context);
        }
        mContextStack.push(context);
    }

    /**
     * context出栈
     *
     * @param context
     */
    public void removeContext(Context context) {
        synchronized (mContextStack) {
            if (mContextStack.contains(context)) {
                mContextStack.remove(context);
            }
        }

    }

    /**
     * 获得栈顶context
     *
     * @return
     */
    public Context getTopContext() {
        synchronized (mContextStack) {
            if (!mContextStack.isEmpty()) {
                return mContextStack.lastElement();
            }
        }
        return null;
    }

    public Stack<Context> getContextStack(){
        return mContextStack;
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }

}
